// PROGRAMA : SCRP1630
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// CLIENTE : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA / INSTITUTO DE IDENT.
// OBJETIVO : INCLUSAO DE FICHA DE INDICE CRIMINAL
// PROGRAMADOR: JOSE ANTONIO COELHO
// DATA : 29 DE JULHO DE 1997
// ALTERACAO : 10/06/1999 POR SOLON MIRANDA
// : 04/11/1999 TELA E DATA (N6) PARA (N8)
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Scrr1600Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Relatorio;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrm1411;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrr1600;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrp1630 OBJETIVO : INCLUSAO DE FICHA DE INDICE CRIMINAL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/scrp1630")
public class Scrp1630 {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	SicSenha senhaView = new SicSenha();
	// Telas/relatorios utilizados
	Scrm1411 scrm1411;
	Scrr1600Report report;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Scrp1630 scrp1630Anterior;
	String faseproc = "0";

	int jDataIni = 0;
	int jDataFim = 0;
	private int jMatric = 0;
	private int jQuant = 0;
	private int jTotal = 0;
	private int jIndex = 0;
	private long jCont = 1;
	Map<Integer, Integer> digitador = new HashMap();
	Relatorio relatorio;

	// private Scrm1411 preMapas() throws JRException, ParseException {
	// int ind;
	// scrm1411 = new Scrm1411(true, sessao);
	// scrm1411.setDataCorrente(UtilBean.inverteDataCorrente());
	// sessao.getScrg001().setWVltw(16);
	// // RELATORIO 1 PS=60 LS=80
	// // report = new Scrr1600Report();
	// // report.setPageSize(60);
	// // report.setLineSize(80);
	// // for (ind = 1; ind <= 12; ind++) {
	// // report.setJmatricula(ind, 0);
	// // report.setJdigitador(ind, "");
	// // report.setJquantidade(ind, 0);
	// // }
	// // RELATORIO
	//
	// return scrm1411;
	// }

	private Relatorio preMapas() {
		primeiraVez = true;
		relatorio = new Relatorio(primeiraVez, sessao);
		relatorio.setNavegar("../scrp1630/executar");
		relatorio.setTitulo("FICHA INDICE CRIMINAL");
		result.include("relatorio", relatorio);
		sessao.setAtributo("SCRP1630", this);
		relatorio.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		sessao.getScrg001().setWVltw(16);
		faseproc = "0";
		return relatorio;
	}

	public Scrp1630(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Relatorio relatorio) {
		try {
			return main(relatorio);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}

	}

	public InputStreamDownload main(Relatorio prelatorio) throws JRException, ParseException, FileNotFoundException {

		if (prelatorio == null) {
			sessao.setAtributo("jDataIni", jDataIni);
			sessao.setAtributo("jDataFim", jDataFim);
			preMapas();

			return null;
		} else {
			restaurarEstados(prelatorio);
		}

		if (prelatorio != null && UtilBean.ctt_retorna.equals(prelatorio.getFuncao())) {
			Scrp1600 scrp1600 = new Scrp1600(result, sessao);
			scrp1600.executar(null, null, null, null);
		}

		if (faseproc == null) {

			preMapas();

			return null;
		}
		jDataIni = (int) sessao.getAtributo("jDataIni");
		jDataFim = (int) sessao.getAtributo("jDataFim");
		return relatorio();
		/*
		 * primeiraVez = true; // scrm1411 = new Scrm1411 (primeiraVez); scrm1411 = preMapas(); scrm1411.setNavegar("../scrp1600/executar"); scrm1411.setHoraCorrente(scrm1411.getHoraCorrente());
		 * scrm1411.setJdiaini((int) UtilBean.extraiDigitos(jDataIni, 8, 6, 2)); scrm1411.setJmesini((int) UtilBean.extraiDigitos(jDataIni, 8, 4, 2)); scrm1411.setJanoini((int)
		 * UtilBean.extraiDigitos(jDataIni, 8, 0, 4)); scrm1411.setJdiafim((int) UtilBean.extraiDigitos(jDataFim, 8, 6, 2)); scrm1411.setJmesfim((int) UtilBean.extraiDigitos(jDataFim, 8, 4, 2));
		 * scrm1411.setJanofim((int) UtilBean.extraiDigitos(jDataFim, 8, 0, 4)); if (jDataIni != 0 && jDataFim != 0) { relatorioTela(); }
		 * 
		 * if (scrm1411.getListascrr1600().size() == 0) { scrm1411.setMensagem("NENHUMA FICHA FOI CADASTRADA NESSE PERIODO."); } result.include("scrm1411", scrm1411); sessao.setAtributo("SCRP1630",
		 * this); scrm1411.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		 */

		// RELATORIO
		// Scrp1600 scrp1600 = new Scrp1600(result, sessao);
		// if (criminalView.registrosProcessados() == 0) {
		// scrp1600.setMensagem("               NENHUMA FICHA FOI CADASTRADA NESSE PERIODO.");
		// }
		// scrp1600.executar(null, null, null, null);

	}

	private void relatorioTela() {

		// Par�grafo: fd33()
		while (criminalView.pesquisaDataDocAtuFaixaStatusRegDifer(jDataIni, jDataFim, 5)) {

			adicionarDigitador(criminalView.getMatriculaFuncAtu());

			jTotal++;

		}
		scrm1411.setTotal(jTotal == 0 ? "" : jTotal + "");
	}

	private void adicionarDigitador(Integer matricula) {
		senhaView.consultaMatricula(matricula);

		try {
			Scrr1600 s = new Scrr1600(matricula, senhaView.getNome(), 1);
			Integer quantidade = new Integer(0);
			Integer index = digitador.get(matricula);

			if (index != null) {

				quantidade = scrm1411.getListascrr1600().get(index).getQuantidade();
				scrm1411.getListascrr1600().get(index).setQuantidade(quantidade++);
			} else {
				scrm1411.getListascrr1600().add(s);
				digitador.put(matricula, scrm1411.getListascrr1600().size() - 1);
			}

		} catch (Exception e) {
		}

	}

	private InputStreamDownload relatorio() throws ParseException, JRException, FileNotFoundException {

		report = new Scrr1600Report();
		report.setPageSize(60);
		report.setLineSize(80);
		report.setHoraCorrente(UtilBean.obtemHoraDia());
		report.setJdiaini((int) UtilBean.extraiDigitos(jDataIni, 8, 6, 2));
		report.setJmesini((int) UtilBean.extraiDigitos(jDataIni, 8, 4, 2));
		report.setJanoini((int) UtilBean.extraiDigitos(jDataIni, 8, 0, 4));
		report.setJdiafim((int) UtilBean.extraiDigitos(jDataFim, 8, 6, 2));
		report.setJmesfim((int) UtilBean.extraiDigitos(jDataFim, 8, 4, 2));
		report.setJanofim((int) UtilBean.extraiDigitos(jDataFim, 8, 0, 4));
		// scrm1411.receberTela(false, result);
		// Par�grafo: fd33()
		while (criminalView.pesquisaDataDocAtuFaixaStatusRegDifer(jDataIni, jDataFim, 5)) {
			if (criminalView.registrosProcessados() == jCont) {
				jCont += 100;
			}
			// SORT MATFUNC-ATU USING DATDOC-ATU HORA-ATU AT BREAK MATFUNC-ATU
			if (criminalView.quebraMatfuncatu()) {
				jIndex += 1;
				report.setJmatricula(jIndex, criminalView.getMatriculaFuncAtu());
				// Par�grafo: fd2()
				senhaView.consultaMatricula(criminalView.getMatriculaFuncAtu());
				report.setJdigitador(jIndex, senhaView.getNome());
				report.setJquantidade(jIndex, jQuant);
				// scrm1430.setJtotal(scrm1430.getJtotal() + jQuant);
				jQuant = 0;
			}
			jQuant = jQuant + 1;
			report.setJquantidade(jIndex, jQuant);
			report.setJtotal(report.getJtotal() + 1);
			jMatric = criminalView.getMatriculaFuncAtu();
			if (report.getPageLine() == report.getPageSize())
				report.gravaRelatorio(1);
			// UtilBean.mensagemTexto("-" "GEJUSPC -");
			// RELATORIO
		}
		if (senhaView.fimDados()) {
			report.gravaRelatorio(1);

			// RELATORIO
		}
		if (report.getPageLine() == report.getPageSize())
			report.gravaRelatorio(1);

		Scrp1600 scrp1600 = new Scrp1600(result, sessao);
		if (criminalView.registrosProcessados() == 0) {
			scrp1600.setMensagem("               NENHUMA FICHA FOI CADASTRADA NESSE PERIODO.");
			scrp1600.executar(null, null, null, null);
		}

		return report.imprimir();
		// UtilBean.mensagemTexto("-" "GEJUSPC -");
		// RELATORIO

	}

	private void restaurarEstados(Scrm1411 pscrm1411) {
		this.scrp1630Anterior = (Scrp1630) sessao.getAtributo("SCRP1630");
		if (pscrm1411 != null) {
			scrm1411 = pscrm1411;
		} else {
			scrm1411 = this.scrp1630Anterior.scrm1411;
		}
		scrm1411.setSessao(sessao);
		this.faseproc = this.scrp1630Anterior.faseproc;
		this.jDataIni = this.scrp1630Anterior.jDataIni;
		this.jDataFim = this.scrp1630Anterior.jDataFim;
	}

	private void restaurarEstados(Relatorio prelatorio) {
		this.scrp1630Anterior = (Scrp1630) sessao.getAtributo("SCRP1630");
		if (prelatorio != null) {
			relatorio = prelatorio;
		} else {
			relatorio = this.scrp1630Anterior.relatorio;
		}

		faseproc = scrp1630Anterior.faseproc;

	}
}
